A set of programmed instructions may be used to control a printing process in a printing device. The instruction set may be installed within the printing device itself, or may be stored on a networked computing device that communicates with the printing device through a communications network. When stored on the printing device, the instruction set is typically stored as firmware, that is, software that is written into in read-only memory of the printing device, such as ROMs, PROMs, EPROMs.
In the printing device firmware, there may be several programming modules that work cooperatively, with each firmware module performing specific functions or tasks during a print job. For example, in the case of a laser printer, one or more firmware modules and sub-modules may receive data from an associated processor, translate and/or parse the data, choose a print medium, control movement of the medium through a paper path, control the transfer of ink onto the medium, and/or prepare the printer for a subsequent print job. The rules governing interactions between firmware modules are sometimes referred to as a “design contract” between the modules.
Various circumstances may occur during a printing process that result in an “exception”, or an error condition. Some exceptions may commonly arise during normal operation of a printing device, and a firmware programmer may anticipate these. For example, the programmer may include instructions in the firmware so that a “paper out” condition causes the printing process to pause, and causes a signal to be generated on a control panel of the printing device to alert a user that more paper is required. Similarly, conditions such as low toner, paper jam, and the like, among others, are exceptions that typically are anticipated during firmware development. Such exceptions may require human intervention before completion of the printing process, but typically do not lead to a global failure of the print job.
During development of the printing device firmware modules, a programmer may attempt to simulate a wide variety of printing conditions, including various exception conditions, and to include programming elements in the firmware to react to each of these exception conditions without a global failure of the print job. However, it may not be possible to predict every possible printing condition that could lead to an exception. Therefore, unusual or atypical printing conditions may occasionally arise that result in an unanticipated exception. In this case, design contract rules may not be in place to govern the interaction between firmware modules, and/or existing design contract rules may be violated. For instance, a firmware module may receive an unexpected communication from another module, or may fail to receive an expected communication.
Other unanticipated exceptions may occur during a printing process as a result of undetected programming errors (commonly known as “bugs”) in the printing device firmware. A programmer may employ various debugging tools to help uncover and correct such errors, and thereby to avoid possible related exceptions within the firmware. However, it may not be possible to uncover every programming error during development, so that the firmware may still occasionally experience bug-related exceptions even after development of the firmware is substantially complete.
Unanticipated exceptions, including those related to unanticipated printing conditions and/or those related to undetected programming errors, may result in global failure of a printing process, so that the print job being processed at the time of the exception cannot be completed. When this occurs, the firmware typically “hangs”, requiring a user to cycle the printing device power in order to reset all of the firmware modules to an initial default state. Cycling the power in this manner typically causes the printing device firmware to recover from the exception, but typically also requires the user to resend the print job to the printing device. This causes delays in printing, and can result in added expense and inconvenience for the printing device user.